[IA64] Fix HVM VGA abnormal.
authorIsaku Yamahata <yamahata@valinux.co.jp>
Tue, 4 Nov 2008 03:07:22 +0000 (12:07 +0900)
committerIsaku Yamahata <yamahata@valinux.co.jp>
Tue, 4 Nov 2008 03:07:22 +0000 (12:07 +0900)
Conversion from p2m entry to physical address, it needs to use
_PAGE_PPN_MASK to mask out some bits which are used by other
purposes by p2m entry.

Sign-off-by : Xiantao Zhang <xiantao.zhang@intel.com>

xen/arch/ia64/vmx/vtlb.c
xen/arch/ia64/xen/mm.c

index fa7ed2b7e0a996be7803e4fb1927e35a1c32faa1..d4651507227fa43297fbc853fa5b5cf3c7af5f7f 100644 (file)
@@ -522,7 +522,8 @@ static u64 translate_phy_pte(VCPU *v, u64 pte, u64 itir, u64 va)
      * which is required by vga acceleration since qemu maps shared
      * vram buffer with WB.
      */
-    if (mfn_valid(maddr >> PAGE_SHIFT) && phy_pte.ma != VA_MATTR_NATPAGE)
+    if (mfn_valid((maddr & _PAGE_PPN_MASK) >> PAGE_SHIFT)
+                               && phy_pte.ma != VA_MATTR_NATPAGE)
         phy_pte.ma = VA_MATTR_WB;
 
     maddr = ((maddr & _PAGE_PPN_MASK) & PAGE_MASK) | (paddr & ~PAGE_MASK);
index 1d530e77cea2bfd21809f7a974e28d6f3ef0e4db..518d225c5ac70fc18e7c6295b6a3397d19b33bec 100644 (file)
@@ -926,7 +926,8 @@ __assign_domain_page(struct domain *d,
     /* in HVM guest, when VTD is enabled,
      * P2M entry may change from _PAGE_IO type to real MMIO page 
      */
-    if(VMX_DOMAIN(d->vcpu[0]) && (pte_val(ret_pte) & _PAGE_IO)) {
+    if(is_hvm_domain(d) && (pte_val(ret_pte) & _PAGE_IO) &&
+       !mfn_valid(physaddr >> PAGE_SHIFT)) {
         old_pte = ret_pte;
         goto again_hvm_page_io;
     }